package com.zerui.manager.access.auth.task.gateway;

import com.zerui.manager.access.auth.task.domain.AuthTask;
import com.zerui.manager.access.auth.task.domain.AuthTaskDetail;

import java.time.LocalDateTime;
import java.util.List;

public interface AuthTaskGateway {

    /**
     * 查询执行任务
     *
     * @param taskId
     * @return
     */
    AuthTask selectByTaskId(Long taskId);

    /**
     * 保存权限下发任务
     *
     * @param authTask
     * @return
     */
    Long saveAuthTask(AuthTask authTask);

    /**
     * 查询未同步的任务
     * @return
     */
    List<AuthTaskDetail> getUnSyncTasks();

    /**
     * 获取指定任务ID的任务详情
     *
     * @param taskId 任务ID
     * @return
     */
    List<AuthTaskDetail> getTaskDetailsByTaskId(Long taskId);

    /**
     * 同步任务成功
     * @param detail
     * @return
     */
    boolean syncSuccess(AuthTaskDetail detail);

    /**
     * 同步任务失败
     * @param detail
     * @return
     */
    boolean syncFailure(AuthTaskDetail detail);

    /**
     * 同步任务执行中
     * @param detail
     * @return
     */
    boolean syncIng(AuthTaskDetail detail);

    /**
     * 同步任务项状态
     *
     * @param taskItemId 任务项ID
     * @param syncStatus 同步状态
     * @param date       日期
     */
    void syncTaskItemStatus(Long taskItemId, Integer syncStatus, LocalDateTime date, Integer retryTimes, String requestId);

    /**
     * 根据请求ID查询任务详情
     * @param requestId
     * @return
     */
    AuthTaskDetail getDetailByRequestId(String requestId);

    /**
     * 同步状态
     *
     * @param taskId     任务ID
     * @param syncStatus 同步状态
     * @param date       当前日期
     */
    void syncTaskStatus(Long taskId, Integer syncStatus, LocalDateTime date);


}
